package bd;

import java.sql.*;

/** Classe pJo, encarregada da criação do painel de jornal
 *
 */
public class pJo extends javax.swing.JPanel {

    private String condicoes;
    private conecta bd;
    private frame principal;
    private ResultSet retorno;
    private boolean atualizacao;
    private String novaLinha;
    private painelTabelas painel;

    /** construtor da classe pJo, encarregado de dar forma ao painel,
     * fazer a ligação com o banco de dados e com a janela principal
     */
    public pJo(conecta bd, frame principal, painelTabelas painel) {
        initComponents();
        this.bd = bd;
        this.principal = principal;
        this.cancelaJo.setVisible(false);
        this.painel = painel;
    }

    /** Método initComponents(). tem a função da criação da janela de jornal,
     * criando botões, caixas de texto, etc. É o método que dá forma à janela.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        buscaJo = new javax.swing.JButton();
        insereJo = new javax.swing.JButton();
        atualizaJo = new javax.swing.JButton();
        removeJo = new javax.swing.JButton();
        cancelaJo = new javax.swing.JButton();
        jLabel23 = new javax.swing.JLabel();
        jLabel24 = new javax.swing.JLabel();
        jLabel25 = new javax.swing.JLabel();
        jLabel26 = new javax.swing.JLabel();
        jLabel27 = new javax.swing.JLabel();
        jLabel28 = new javax.swing.JLabel();
        jLabel29 = new javax.swing.JLabel();
        idDeJORNAL = new javax.swing.JTextField();
        duracaoJoJORNAL = new javax.swing.JTextField();
        abrangenciaJoJORNAL = new javax.swing.JTextField();
        idPrJORNAL = new javax.swing.JTextField();
        tituloPrJORNAL = new javax.swing.JTextField();
        descricaoJoJORNAL = new javax.swing.JTextField();

        buscaJo.setText("Buscar");
        buscaJo.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                buscaJoActionPerformed(evt);
            }
        });

        insereJo.setText("Inserir");
        insereJo.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                insereJoActionPerformed(evt);
            }
        });

        atualizaJo.setText("Atualizar");
        atualizaJo.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                atualizaJoActionPerformed(evt);
            }
        });

        removeJo.setText("Remover");
        removeJo.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                removeJoActionPerformed(evt);
            }
        });

        cancelaJo.setText("Cancelar");
        cancelaJo.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                cancelaJoActionPerformed(evt);
            }
        });

        jLabel23.setText("ID da Produção:");

        jLabel24.setText("Título do Jornal:");

        jLabel25.setText("Entre com os dados:");

        jLabel26.setText("ID do Departamento:");

        jLabel27.setText("Duração do Jornal:");

        jLabel28.setText("Abrangência:");

        jLabel29.setText("Descrição:");

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
        this.setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 489, Short.MAX_VALUE)
            .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGroup(layout.createSequentialGroup()
                    .addGap(48, 48, 48)
                    .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                        .addGroup(layout.createSequentialGroup()
                            .addComponent(buscaJo)
                            .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                            .addComponent(insereJo)
                            .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                            .addComponent(atualizaJo)
                            .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                            .addComponent(removeJo)
                            .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                            .addComponent(cancelaJo))
                        .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                            .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                                .addComponent(jLabel25, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 317, Short.MAX_VALUE)
                                .addGroup(javax.swing.GroupLayout.Alignment.LEADING, layout.createSequentialGroup()
                                    .addComponent(jLabel28)
                                    .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 253, javax.swing.GroupLayout.PREFERRED_SIZE))
                                .addGroup(javax.swing.GroupLayout.Alignment.LEADING, layout.createSequentialGroup()
                                    .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                        .addComponent(jLabel27)
                                        .addComponent(jLabel26)
                                        .addComponent(jLabel23)
                                        .addComponent(jLabel24)
                                        .addComponent(jLabel29))
                                    .addGap(18, 18, 18)
                                    .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                        .addComponent(descricaoJoJORNAL, javax.swing.GroupLayout.DEFAULT_SIZE, 197, Short.MAX_VALUE)
                                        .addComponent(idPrJORNAL, javax.swing.GroupLayout.DEFAULT_SIZE, 197, Short.MAX_VALUE)
                                        .addComponent(tituloPrJORNAL, javax.swing.GroupLayout.DEFAULT_SIZE, 197, Short.MAX_VALUE)
                                        .addComponent(duracaoJoJORNAL, javax.swing.GroupLayout.DEFAULT_SIZE, 197, Short.MAX_VALUE)
                                        .addComponent(idDeJORNAL, javax.swing.GroupLayout.DEFAULT_SIZE, 197, Short.MAX_VALUE)
                                        .addComponent(abrangenciaJoJORNAL, javax.swing.GroupLayout.DEFAULT_SIZE, 197, Short.MAX_VALUE))))
                            .addGap(76, 76, 76)))
                    .addGap(48, 48, 48)))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 317, Short.MAX_VALUE)
            .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGroup(layout.createSequentialGroup()
                    .addContainerGap()
                    .addComponent(jLabel25)
                    .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                    .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                        .addComponent(jLabel23)
                        .addComponent(idPrJORNAL, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                    .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                        .addComponent(jLabel24)
                        .addComponent(tituloPrJORNAL, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addGap(12, 12, 12)
                    .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                        .addComponent(jLabel26)
                        .addComponent(idDeJORNAL, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                    .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                        .addComponent(jLabel27)
                        .addComponent(duracaoJoJORNAL, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                    .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                        .addComponent(jLabel28)
                        .addComponent(abrangenciaJoJORNAL, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                    .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                        .addComponent(jLabel29)
                        .addComponent(descricaoJoJORNAL, javax.swing.GroupLayout.DEFAULT_SIZE, 105, Short.MAX_VALUE))
                    .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                    .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                        .addComponent(buscaJo)
                        .addComponent(insereJo)
                        .addComponent(atualizaJo)
                        .addComponent(removeJo)
                        .addComponent(cancelaJo))
                    .addContainerGap()))
        );
    }// </editor-fold>//GEN-END:initComponents

    /** Trata eventos relacionados ao botão buscar.
     * Realiza a busca de acordo com determinado texto digitado, retornando
     * o resultado da pesquisa. Também trata erro.
     */
    private void buscaJoActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_buscaJoActionPerformed
        lerJornal();
        try {
            System.out.println(condicoes);
            retorno = bd.consulta("SELECT * FROM jornal " + condicoes);
            this.principal.mostraBusca(retorno);
        } catch (SQLException ex) {
            bd.trataErro(ex);
        }
        limpaTela();
    }//GEN-LAST:event_buscaJoActionPerformed

    /** Trata eventos relacionados ao botão atualiza. Quando o botão é pressionado,
     * é enviada uma mensagem de instruções para acontecer a atualização.
     * Recebe os dados digitados e atualiza no banco.
     */
    private void atualizaJoActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_atualizaJoActionPerformed
        if (atualizacao == false) {
            lerJornal();//fazer o teste para ver quantoas linhas irá atualizar
            jLabel25.setText("Entre com os novos dados e aperte atualizar novamente");
            mudaVisualizacaoJo();
            limpaTela();
        } else if (atualizacao == true) {
            novaLinha = "SET";
            if (idPrJORNAL.getText() != null && !idPrJORNAL.getText().trim().equals("")) {
                novaLinha = novaLinha + " idPr = " + idPrJORNAL.getText() + ", ";
            }
            if (tituloPrJORNAL.getText() != null && !tituloPrJORNAL.getText().trim().equals("")) {
                novaLinha = novaLinha + " UPPER(tituloPr) LIKE UPPER('%" + tituloPrJORNAL.getText() + "%'), ";
            }
            if (idDeJORNAL.getText() != null && !idDeJORNAL.getText().trim().equals("")) {
                novaLinha = novaLinha + " idDe = " + idDeJORNAL.getText() + ", ";
            }
            if (duracaoJoJORNAL.getText() != null && !duracaoJoJORNAL.getText().trim().equals("")) {
                novaLinha = novaLinha + " UPPER(duracaoJo) LIKE UPPER('%" + duracaoJoJORNAL.getText() + "%'), ";
            }
            if (abrangenciaJoJORNAL.getText() != null && !abrangenciaJoJORNAL.getText().trim().equals("")) {
                novaLinha = novaLinha + " UPPER(abrangenciaJo) LIKE UPPER('%" + abrangenciaJoJORNAL.getText() + "%'), ";
            }
            if (descricaoJoJORNAL.getText() != null && !descricaoJoJORNAL.getText().trim().equals("")) {
                novaLinha = novaLinha + " UPPER(descricaoPr) LIKE UPPER('%" + descricaoJoJORNAL.getText() + "%'), ";
            }
            novaLinha = novaLinha.substring(0, novaLinha.length() - 2);
            bd.atualiza("UPDATE jornal " + novaLinha + " " + condicoes);
            jLabel25.setText("Entre com os dados:");
            mudaVisualizacaoJo();
            condicoes = null;
            novaLinha = null;
            limpaTela();
        }
    }//GEN-LAST:event_atualizaJoActionPerformed

    /** Trata eventos relacionados ao botão remove.
     * Remove determinada tupla selecionada. trata erros
     */
    private void removeJoActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_removeJoActionPerformed
        novaLinha = "jornal";//novaLinha esta sendo usada para parametrizar a exclusão pelo outro painel
        lerJornal();
        try {
            retorno = bd.consulta("SELECT * FROM " + novaLinha + " " + condicoes);
            this.painel.novaLinha = novaLinha;
            this.painel.condicoes = condicoes;
        } catch (SQLException ex) {
            System.out.println("Erro " + ex);
        }
        this.principal.BuscaParaRemover(retorno);
        limpaTela();
    }//GEN-LAST:event_removeJoActionPerformed

    /** Trata eventos relacionados ao botão cancelar.
     * Ajusta o label da janela, volta pra janela principal e limpa os campos
     */
    private void cancelaJoActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cancelaJoActionPerformed
        jLabel25.setText("Entre com os dados:");
        mudaVisualizacaoJo();
        condicoes = null;
        novaLinha = null;
        limpaTela();
    }//GEN-LAST:event_cancelaJoActionPerformed

    /** Trata eventos relacionados ao botão insere.
     * Faz a inserção no banco de dados dos valores digitados no painel.
     */
    private void insereJoActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_insereJoActionPerformed
        bd.insercao("INSERT INTO jornal(idPr, tituloPr, descricaoPr, idDe, duracaoJo, abrangenciaJo)"
                + " VALUES (ID_PR.NEXTVAL, '" + tituloPrJORNAL.getText() + "',"
                + " '" + descricaoJoJORNAL.getText() + "', " + idDeJORNAL.getText() + ","
                + " '" + duracaoJoJORNAL.getText() + "', UPPER('" + abrangenciaJoJORNAL.getText() + "'))");
        limpaTela();
    }//GEN-LAST:event_insereJoActionPerformed
    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JTextField abrangenciaJoJORNAL;
    private javax.swing.JButton atualizaJo;
    private javax.swing.JButton buscaJo;
    private javax.swing.JButton cancelaJo;
    private javax.swing.JTextField descricaoJoJORNAL;
    private javax.swing.JTextField duracaoJoJORNAL;
    private javax.swing.JTextField idDeJORNAL;
    private javax.swing.JTextField idPrJORNAL;
    private javax.swing.JButton insereJo;
    private javax.swing.JLabel jLabel23;
    private javax.swing.JLabel jLabel24;
    private javax.swing.JLabel jLabel25;
    private javax.swing.JLabel jLabel26;
    private javax.swing.JLabel jLabel27;
    private javax.swing.JLabel jLabel28;
    private javax.swing.JLabel jLabel29;
    private javax.swing.JButton removeJo;
    private javax.swing.JTextField tituloPrJORNAL;
    // End of variables declaration//GEN-END:variables

    /** Lê valores digitados, usando-os para fazer a condição do select
     */
    private void lerJornal() {
        condicoes = "WHERE";
        if (idPrJORNAL.getText() != null && !idPrJORNAL.getText().trim().equals("")) {
            condicoes = condicoes + " idPr = " + idPrJORNAL.getText() + " AND ";
        }
        if (tituloPrJORNAL.getText() != null && !tituloPrJORNAL.getText().trim().equals("")) {
            condicoes = condicoes + " UPPER(tituloPr) LIKE UPPER('%" + tituloPrJORNAL.getText() + "%') AND ";
        }
        if (idDeJORNAL.getText() != null && !idDeJORNAL.getText().trim().equals("")) {
            condicoes = condicoes + " idDe = " + idDeJORNAL.getText() + " AND ";
        }
        if (duracaoJoJORNAL.getText() != null && !duracaoJoJORNAL.getText().trim().equals("")) {
            condicoes = condicoes + " UPPER(duracaoJo) LIKE UPPER('%" + duracaoJoJORNAL.getText() + "%') AND ";
        }
        if (abrangenciaJoJORNAL.getText() != null && !abrangenciaJoJORNAL.getText().trim().equals("")) {
            condicoes = condicoes + " UPPER(abrangenciaJo) LIKE UPPER('%" + abrangenciaJoJORNAL.getText() + "%') AND ";
        }
        if (descricaoJoJORNAL.getText() != null && !descricaoJoJORNAL.getText().trim().equals("")) {
            condicoes = condicoes + " UPPER(descricaoPr) LIKE UPPER('%" + descricaoJoJORNAL.getText() + "%') AND ";
        }
        condicoes = condicoes.substring(0, condicoes.length() - 5);
    }

    /** limpa os campos.
     */
    private void limpaTela() {
        abrangenciaJoJORNAL.setText(null);
        descricaoJoJORNAL.setText(null);
        duracaoJoJORNAL.setText(null);
        idDeJORNAL.setText(null);
        idPrJORNAL.setText(null);
        tituloPrJORNAL.setText(null);
    }

    /** Método que muda a visualização da janela de jornal
     */
    private void mudaVisualizacaoJo() {
        cancelaJo.setVisible(!atualizacao);
        painel.abaEdicaoTabelas.setEnabled(atualizacao);
        painel.painelPrincipal.setEnabled(atualizacao);
        buscaJo.setEnabled(atualizacao);
        insereJo.setEnabled(atualizacao);
        removeJo.setEnabled(atualizacao);
        atualizacao = !atualizacao;
    }
}
